In a storage network comprising multiple hosts and a disk array, a disk driver is a computer program which allows one or more applications accessing a host to interact with a disk in the disk array. The disk driver typically communicates with the disk through a computer bus or communications subsystem to which the disk is connected. When an application invokes one or more input/output (I/O) requests to the driver, the disk driver issues respective commands to the disk. Once the disk sends data back to the disk driver, the disk driver may invoke routines in the original application program.
A queue may be used to deal with multiple I/O requests in the host side as well as the disk array side. On the host side, multiple I/O requests from one or more applications may wait in a queue coupled to the disk driver until the disk driver is ready to service them. On the disk array side, many I/O requests from one or more hosts may wait in a queue coupled to each disk (e.g., or port) of the array to execute the I/O requests in order. Here, a maximum queue depth may refer to the maximum number of the I/O requests or commands which can be concurrently issued by the disk driver, where not all of the I/O requests may be serviced or responded by the disk.
In the industry, it is common practice to configure the maximum queue depth before a host device, such as a server, is delivered to a customer. However, the configuration may be done without considering the type or capability of the disk device(s) the host is connected to. Accordingly, if the maximum queue depth is too big for the customer's use, it may cause the disk driver to issue too many I/O requests, thus resulting in slowing down or termination of the I/O process. On the other hand, if the maximum queue depth is too small, the disk driver may issue too few I/O requests at a time, thus resulting in lower throughput and inefficient usage of the disk device. Furthermore, when too many I/O requests from multiple hosts are concurrently forwarded to the queue for the same disk of the storage array, a “queue full” condition may occur at the device side of the queue. In such a case, a host may have to retransmit the I/O requests which have been rejected, thus significantly reducing the I/O throughput of the storage network.
Other features of the present embodiments will be apparent from the accompanying drawings and from the detailed description that follows.